package com.leetCode;

/**
 * 给定一个数字，以它的各位为元素，组合出下一个比它大的最小数字；
 * 比如1234，输出1243；
 * 比如1243，输出1324；
 */
public class test2 {
    public static void main(String[] args) {
        int num = 4312;

        int newNum = changeBig(num);

        System.out.println("比" + num + "大且以它各个单位为元素的数是：" + newNum);
    }

    public static int changeBig(int num) {
        //首先将接受来的数据转成字符串然后拆解开
        String stringNum = num + "";
        byte[] chars = stringNum.getBytes();                    //未排序的

        byte[] other = new byte[chars.length];                  //排序的
        System.arraycopy(chars,0,other,0,chars.length);

        //进行排序
        other = getArray(other);
        //然后再找出比每一个字符大一点的数据

        //进行比较大小
        String s = "";
        //遍历排序的数据，如果排序的数比未排序的数据大，那么就直接去这个数
        for (int i = 0; i < chars.length; i++) {                         //未排序的
            for (int j = 0; j < other.length; j++) {                     //排好序的

                if(other[j] >= chars[i]){
                    s += Byte.toString(other[j]);//先转成String
                    break;
                }
            }
        }

        //将字符装成数字
        int i = Integer.parseInt(s);


        return i;
    }

    public static byte[] getArray(byte[] other){
        byte c = ' ';
        //先冒泡从小到大排序
        for (int i = 1; i < other.length; i++) {
            for (int j = 0; j < other.length - 1; j++) {
                if(other[j] > other[j + 1]){
                    c = other[j];
                    other[j] = other[j + 1];
                    other[j + 1] = c;
                }
            }
        }
        return other;
    }
}
